<#--${novlaue } -->
空值的处理使用!或者??
<#-- 空值的处理使用!或者?? -->
<#noparse>${u.name}</#noparse>输出：${u.name}

<#-- 没有给cat属性赋值 -->
<#-- 1.如果直接访问u.cat，因为cat为null，会报错，需要在后面加上!，
		!后面可以给值也可以不给，如果给了，就显示！后面的内容 -->
没有给cat属性赋值 
1.如果直接访问u.cat，因为cat为null，会报错，需要在后面加上!，
		!后面可以给值也可以不给，如果给了，就显示！后面的内容 
<#noparse>${u.cat!}</#noparse>输出：${u.cat!}

<#-- 2.对象已经为null，还访问下面的属性，需要使用()!的形式 -->
2.对象已经为null，可以给定默认值
<#noparse>${(u.cat.name)!"没有猫或者猫没有名字"}</#noparse>输出如下：
${(u.cat.name)!"没有猫或者猫没有名字"}

<#-- 3.访问不存在的属性，使用! -->
3.访问不存在的属性，使用!
<#noparse>${u.age!}</#noparse>输出：${u.age!}
<#noparse>${u.sex!}</#noparse>输出：${u.sex!}

根据实例3，我们看到 u.age 和 u.sex 属于两种情况
u.age 没有这个属性 即 null 
u.sex 有这个属性 是 “” 空字符串 
那如何区分这两种情况呢？
<#-- 4.使用??判断对象或者属性是否存在 -->
4.使用??判断对象或者属性是否存在
<#if u.age??>
	有age属性
	<#else>
	age属性不存在
</#if>
<#if u.sex??>
	有sex属性
	<#else>
	sex属性不存在
</#if>

<#-- 5.三目运算符 -->
${1.0}
${(1.0)?string}
${false?c}
${false?string("对","错")}
${false?string("错","对")}
